create or replace type m4o_fn as object (
    c                 number,
    bound_result_name varchar2(30),
    constructor function m4o_fn (
        p_c in number )
        return self as result,
    constructor function m4o_fn (
        p_sql in varchar2,
        p_n1  in varchar2 default null,
        p_v1  in varchar2 default null,
        p_n2  in varchar2 default null,
        p_v2  in varchar2 default null,
        p_n3  in varchar2 default null,
        p_v3  in varchar2 default null )
        return self as result,
    member procedure bind (
        self in m4o_fn,
        p_n in varchar2,
        p_v in number ),
    member procedure bind (
        self in m4o_fn,
        p_n in varchar2,
        p_v in varchar2 ),
    member procedure bind (
        self in m4o_fn,
        p_n in varchar2,
        p_v in date ),
    member procedure bind_null (
        self in m4o_fn,
        p_n in varchar2 ),
    member procedure exec (
        self in m4o_fn ),
    member function exec (
        self     in m4o_fn,
        p_n1     in varchar2 default null,
        p_v1     in varchar2 default null,
        p_n2     in varchar2 default null,
        p_v2     in varchar2 default null,
        p_n3     in varchar2 default null,
        p_v3     in varchar2 default null,
        p_result in varchar2 default 'r')
        return varchar2,
    member function value (
        self in m4o_fn,
        p_n in varchar2 )
        return varchar2,
    member procedure close (
        self in m4o_fn )
)
/
show err

